package Servlets;

import Estructuras.Principales.PrincipalOptica;
import Herramientas.RedireccionPOPUP;
import OpticaDAOS.HistorialClinicoDAO;
import OpticaDAOS.PacientesDAO;
import OpticaDTOS.HistorialClinicoDTO;
import OpticaDTOS.PacientesDTO;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Vector;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Alan Gonzalez
 */

@WebServlet(name = "OpticaAdmin", urlPatterns = {"/OpticaAdmin"})
public class OpticaAdmin extends HttpServlet {

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            HttpSession session = request.getSession();
            String Action = request.getParameter("action");
            Vector errores = new Vector();

            if (Action.equals("principal")) {
                response.sendRedirect("OpticaJSP/menu.jsp");

            } else if (Action.equals("exped")) {
                // SE CARGAN DATOS Y SE REDIRECCIONA 
                PrincipalOptica principal = new PrincipalOptica();
                PacientesDAO pacientesDAO = new PacientesDAO();
                principal.setPasientes(pacientesDAO.seleccionarTodos());
                session.setAttribute("principalOptica", principal);
                response.sendRedirect("OpticaJSP/clientes.jsp");

            } else if (Action.equals("expedientesFiltro")) {
                String filtroNombre = request.getParameter("filtroNombre");
                String filtroApMaterno = request.getParameter("filtroApMaterno");
                String filtroApPaterno = request.getParameter("filtroApPaterno");
                PrincipalOptica principal = new PrincipalOptica();
                PacientesDAO pacientesDAO = new PacientesDAO();
                principal.setPasientes(pacientesDAO.seleccionarPorNombre(filtroNombre, filtroApMaterno, filtroApPaterno));
                session.setAttribute("principalOptica", principal);
                response.sendRedirect("OpticaJSP/clientes.jsp");

            } else if (Action.equals("expedClientes")) {
                int idCliente = Integer.parseInt(request.getParameter("idCliente"));
                PrincipalOptica principal = (PrincipalOptica) session.getAttribute("principalOptica");
                HistorialClinicoDAO historialClinicoDAO = new HistorialClinicoDAO();
                principal.setHitorialClinico(historialClinicoDAO.seleccionarPorIdCliente(idCliente));
                principal.setIdClienteApuntador(idCliente);
                session.setAttribute("principalOptica", principal);
                response.sendRedirect("OpticaJSP/historialClinico.jsp");

            } else if (Action.equals("abrirExpediente")) {
                int idExpediente = Integer.parseInt(request.getParameter("HistClinID"));
                HistorialClinicoDAO historialClinicoDAO = new HistorialClinicoDAO();
                HistorialClinicoDTO historialClinicoDTO = new HistorialClinicoDTO();
                historialClinicoDTO = historialClinicoDAO.SeleccionarHistorialID(idExpediente);
                PrincipalOptica principal = (PrincipalOptica) session.getAttribute("principalOptica");
                session.setAttribute("principalOptica", principal);
                response.sendRedirect("OpticaJSP/historial.jsp");

            } else if (Action.equals("nuevoExpediente")) {

                int index = Integer.parseInt(request.getParameter("index"));

                if (index == 1) {
                    PrincipalOptica principal = (PrincipalOptica) session.getAttribute("principalOptica");
                    principal.setErrores(errores);
                    principal.getErrores().clear();
                    principal.setHistorialClinicoDTO(null);
                    session.setAttribute("principalOptica", principal);
                    response.sendRedirect("OpticaJSP/historial.jsp");
                } else if (index == 2) {

                    PrincipalOptica principal = (PrincipalOptica) session.getAttribute("principalOptica");
                    HistorialClinicoDTO h = new HistorialClinicoDTO();
                    errores.clear();
                    h.setIdCliente(principal.getIdClienteApuntador());
                    if (request.getParameter("principalProblema").toString().length() > 0) {
                        h.setPrincipalProblema(request.getParameter("principalProblema").toString());
                    } else {
                        errores.add("CAMPO PRINCIPAL PROBLEMA ES OBLIGATORIO");
                    }
                    // CAMPOS SIN VALIDACION
                    int anioUltimoExamen = Integer.parseInt(request.getParameter("anio"));
                    int mesUltimoExamen = Integer.parseInt(request.getParameter("mes"));
                    String fechaUltimoExamen = anioUltimoExamen + "-" + mesUltimoExamen + "-01";
                    h.setUltimoExamen(fechaUltimoExamen);

                    // MEJOR RANGO DE VISTA
                    if (request.getParameter("rangoVisual") != null) {
                        h.setMejorVista(Integer.parseInt(request.getParameter("rangoVisual")));
                    } else {
                        errores.add("SELECCIONE UNA OPCION EN RANGO VISUAL");
                    }

                    // SENCIBILIDAD AL TIPO DE LUZ 
                    if (request.getParameter("sencibilidadLuz") != null) {
                        h.setTipoLuzSencibilidad(Integer.parseInt(request.getParameter("sencibilidadLuz")));
                    } else {
                        errores.add("SELECCIONE UNA OPCION EN EL TIPO DE LUZ");
                    }

                    // QUERATOMETRIAS
                    if (request.getParameter("od").toString().length() > 0) {
                        h.setOd(request.getParameter("od").toString());
                    } else {
                        errores.add("EL CAMPO O.D. ES OBLIGATORIO");
                    }

                    if (request.getParameter("odx").toString().length() > 0) {
                        h.setOdx(request.getParameter("odx").toString());
                    } else {
                        errores.add("EL CAMPO O.D.X. ES OBLIGATORIO");
                    }

                    if (request.getParameter("oi").toString().length() > 0) {
                        h.setOi(request.getParameter("oi").toString());
                    } else {
                        errores.add("EL CAMPO O.I. ES OBLIGATORIO");
                    }

                    if (request.getParameter("oix").toString().length() > 0) {
                        h.setOix(request.getParameter("oix").toString());
                    } else {
                        errores.add("EL CAMPO O.I.X. ES OBLIGATORIO");
                    }

                    // SINTOMAS
                    h.setOjosArdor(request.getParameter("ardor") == null ? 0 : 1);
                    h.setOjosLlorosos(request.getParameter("lloran") == null ? 0 : 1);
                    h.setDiabetes(request.getParameter("diabetes") == null ? 0 : 1);
                    h.setHipertension(request.getParameter("hipertension") == null ? 0 : 1);
                    h.setAlergias(request.getParameter("alergias") == null ? 0 : 1);

                    if (request.getParameter("materiales").toString().length() > 0) {
                        h.setMateriales(request.getParameter("materiales"));
                    } else {
                        errores.add("EL CAMPO MATERIALES ES OBLIGATORIO");
                        System.out.println("materiales nulo");
                    }

                    if (request.getParameter("modelo").toString().length() > 0) {
                        h.setModelo(request.getParameter("modelo"));
                        System.out.println("dato escrto en modelo" + h.getModelo());
                    } else {
                        errores.add("EL CAMPO  MODELO  ES OBLIGATORIO");
                        System.out.println("modelo nulo");
                    }

                    // PRIMER TABLA
                    if (request.getParameter("avscod").toString().length() > 0) {
                        h.setAvscod(Double.parseDouble(request.getParameter("avscod")));
                    } else {
                        errores.add("EL CAMPO avscod    ES OBLIGATORIO");
                        System.out.println("avscod nulo");
                    }

                    if (request.getParameter("avscoi").toString().length() > 0) {
                        h.setAvscoi(Double.parseDouble(request.getParameter("avscoi")));
                    } else {
                        errores.add("EL CAMPO avscoi  ES OBLIGATORIO");
                        System.out.println("avscoi  nulo");
                    }

                    // SEGUNDA TABLA
                    if (request.getParameter("avrxod").toString().length() > 0) {
                        h.setAvccrxod(Double.parseDouble(request.getParameter("avrxod")));
                    } else {
                        errores.add("EL CAMPO avccrxod ES OBLIGATORIO");
                        System.out.println("avscrxodnulo");
                    }
                    if (request.getParameter("avrxoi").toString().length() > 0) {
                        h.setAvccrxoi(Double.parseDouble(request.getParameter("avrxoi")));
                    } else {
                        errores.add("EL CAMPO  avccrxoi ES OBLIGATORIO");
                        System.out.println("avccrxoi nulo");
                    }

                    // TERCER TABLA
                    if (request.getParameter("avcaeod").toString().length() > 0) {
                        h.setAvcaeod(Double.parseDouble(request.getParameter("avcaeod")));
                    } else {
                        errores.add("EL CAMPO  avcaeod  ES OBLIGATORIO");
                        System.out.println("avcaeod nulo");
                    }

                    if (request.getParameter("avcaeoi").toString().length() > 0) {
                        h.setAvcaeoi(Double.parseDouble(request.getParameter("avcaeoi")));
                    } else {
                        errores.add("EL CAMPO avcaeoi ES OBLIGATORIO");
                        System.out.println("avcaeoi nulo");
                    }
                    
                    
                    // ==========  NUEVA GRADUACION OJO DERECHO 
                    
                     // NUEVA GRADUACION OJO DERECHO
                    if (request.getParameter("odesf").toString().length() > 0) {
                        h.setOdesf(Double.parseDouble(request.getParameter("odesf")));
                    } else {
                        errores.add("EL CAMPO  odesf ES OBLIGATORIO");
                        System.out.println("odesf nulo");
                    }
                    if (request.getParameter("odcil").toString().length() > 0) {
                        h.setOdcil(Double.parseDouble(request.getParameter("odcil")));
                    } else {
                        errores.add("EL CAMPO  odcil  ES OBLIGATORIO");
                        System.out.println("odcil nulo");
                    }
                    if (request.getParameter("odeje").toString().length() > 0) {
                        h.setOdeje(Double.parseDouble(request.getParameter("odeje")));
                    } else {
                        errores.add("EL CAMPO  odeje ES OBLIGATORIO");
                        System.out.println("odeje nulo");
                    }
                    if (request.getParameter("odadd").toString().length() > 0) {
                        h.setOdadd(Double.parseDouble(request.getParameter("odadd")));
                    } else {
                        errores.add("EL CAMPO  odadd ES OBLIGATORIO");
                        System.out.println("odadd nulo");
                    }
                    if (request.getParameter("odalt").toString().length() > 0) {
                        h.setOdalt(Double.parseDouble(request.getParameter("odalt")));
                    } else {
                        errores.add("EL CAMPO  odaltura ES OBLIGATORIO");
                        System.out.println("odaltura nulo");
                    }
                    if (request.getParameter("oddi").toString().length() > 0) {
                        h.setOddi(Double.parseDouble(request.getParameter("oddi")));
                    } else {
                        errores.add("EL CAMPO  oddi ES OBLIGATORIO");
                        System.out.println("oddi nulo");
                    }
                   
                    
                    // NUEVA GRADUACION OJO IZQUIERDO
                                        
                    // NUEVA GRADUACION OJO IZQUIERDO
                    if (request.getParameter("oiesf").toString().length() > 0) {
                        h.setOiesf(Double.parseDouble(request.getParameter("oiesf")));
                    } else {
                        errores.add("EL CAMPO  oiesf ES OBLIGATORIO");
                    }
                    if (request.getParameter("oicil").toString().length() > 0) {
                        h.setOicil(Double.parseDouble(request.getParameter("oicil")));
                    } else {
                        errores.add("EL CAMPO  oicil  ES OBLIGATORIO");
                    }
                    
                    if (request.getParameter("oieje").toString().length() > 0) {
                        h.setOieje(Double.parseDouble(request.getParameter("oieje")));
                    } else {
                        errores.add("EL CAMPO  oieje ES OBLIGATORIO");
                    }
                    
                    if (request.getParameter("oiadd").toString().length() > 0) {
                        h.setOiadd(Double.parseDouble(request.getParameter("oiadd")));
                    } else {
                        errores.add("EL CAMPO  oiadd ES OBLIGATORIO");
                    }
                    
                    
                    if (request.getParameter("oialt").toString().length() > 0) {
                        h.setOialt(Double.parseDouble(request.getParameter("oialt")));
                    } else {
                        errores.add("EL CAMPO  oialtura ES OBLIGATORIO");
                    }
                    if (request.getParameter("oidi").toString().length() > 0) {
                        h.setOidi(Double.parseDouble(request.getParameter("oidi")));
                    } else {
                        errores.add("EL CAMPO  oddi ES OBLIGATORIO");
                    }

                   
                    if (errores.size() == 0) {
                        RedireccionPOPUP redireccionPopUp = new RedireccionPOPUP();
                        redireccionPopUp.setServicio("./OpticaAdmin?action=expedClientes");
                        redireccionPopUp.setVariables("idCliente=" + principal.getIdClienteApuntador());
                        // metodo para crear el registro
                        HistorialClinicoDAO historialClinicoDAO = new HistorialClinicoDAO();
                        historialClinicoDAO.nuevoRegistro(h);

                        principal.setRedireccionPopUp(redireccionPopUp);
                        session.setAttribute("principalOptica", principal);
                        response.sendRedirect("loading.jsp");
                    } else {
                        principal.setErrores(errores);
                        session.setAttribute("principalOptica", principal);
                        response.sendRedirect("OpticaJSP/historial.jsp");
                    }
                }
            } else if (Action.equals("abrir")) {
                int idItem = Integer.parseInt(request.getParameter("id"));
                System.out.println("entro correctamente");
                System.out.println("el id del item: " + idItem);
                errores.clear();
                PrincipalOptica principal = (PrincipalOptica) session.getAttribute("principalOptica");
                principal.setErrores(errores);
                HistorialClinicoDAO historialClinicoDAO = new HistorialClinicoDAO();
                HistorialClinicoDTO h = new HistorialClinicoDTO();
                h = historialClinicoDAO.SeleccionarHistorialID(idItem);
                principal.setHistorialClinicoDTO(h);
                session.setAttribute("principalOptica", principal);
                response.sendRedirect("OpticaJSP/historial.jsp");

            } // -- 
            else if (Action.equals("nuevoCliente")) {
                int index = Integer.parseInt(request.getParameter("index"));
                PrincipalOptica principal = new PrincipalOptica();

                switch (index) {
                    case 1: // MUESTRO EL JSP LIMPIO
                        errores.clear();
                        principal.setErrores(errores);
                        session.setAttribute("principalOptica", principal);
                        response.sendRedirect("OpticaJSP/cliente.jsp");
                        break;
                    case 2: // RECUPERO DATOS DE LA INTERFAZ  
                        PacientesDTO p = new PacientesDTO();
                        errores.clear();

                        if (request.getParameter("nombres").toString().length() > 0) {
                            p.setNombres(request.getParameter("nombres"));
                        } else {
                            errores.add("EL CAMPO NOMBRE ES OBLIGATORIO");
                        }

                        if (request.getParameter("appat").toString().length() > 0) {
                            p.setAp_pat(request.getParameter("appat"));
                        } else {
                            errores.add("EL CAMPO APELLIDO PATERNO ES OBLIGATORIO");
                        }

                        if (request.getParameter("apmat").toString().length() > 0) {
                            p.setAp_mat(request.getParameter("apmat"));
                        } else {
                            errores.add("EL CAMPO APPELIDO MATERNO ES OBLIGATORIO");
                        }

                        if (request.getParameter("dir").toString().length() > 0) {
                            p.setDireccion(request.getParameter("dir"));
                        } else {
                            errores.add("EL CAMPO DIRECCION ES OBLIGATORIO");
                        }

                        if (request.getParameter("edad").toString().length() > 0) {
                            p.setEdad(Integer.parseInt(request.getParameter("edad")));
                        } else {
                            errores.add("EL CAMPO EDAD ES OBLIGATORIO");
                        }

                        if (request.getParameter("email").toString().length() > 0) {
                            p.setEmail(request.getParameter("email"));
                        } else {
                            errores.add("EL CAMPO EMAIL ES OBLIGATORIO");
                        }

                        if (request.getParameter("tel").toString().length() > 0) {
                            p.setTelefono(Integer.parseInt(request.getParameter("tel")));

                        } else {
                            errores.add("EL CAMPO TELEFONO ES OBLIGATORIO");
                        }

                        //  GUARDANDO EL NUEVO REGISTRO
                        if (errores.size() == 0) {
                            PacientesDAO pacientesDAO = new PacientesDAO();
                            pacientesDAO.nuevo(p);
                            RedireccionPOPUP redireccion = new RedireccionPOPUP();
                            redireccion.setServicio("./OpticaAdmin?action=exped");
                            principal.setRedireccionPopUp(redireccion);
                            session.setAttribute("principalOptica", principal);
                            response.sendRedirect("loading.jsp");
                        } else if (errores.size() > 0) {
                            principal.setErrores(errores);
                            session.setAttribute("principalOptica", principal);
                            response.sendRedirect("OpticaJSP/cliente.jsp");
                        }
                        break;
                }

            } else if (Action.equals("borrarCliente")) {
                int idCliente = Integer.parseInt(request.getParameter("id"));
                PrincipalOptica principal = (PrincipalOptica) session.getAttribute("principalOptica");
                PacientesDAO pacientesDAO = new PacientesDAO();
                pacientesDAO.borradoLogico(idCliente);
                principal.setPasientes(pacientesDAO.seleccionarTodos());
                session.setAttribute("principalOptica", principal);
                response.sendRedirect("OpticaJSP/clientes.jsp");

            } else if (Action.equals("borrarHistorial")) {
                int idHistorial = Integer.parseInt(request.getParameter("id"));
                PrincipalOptica principal = (PrincipalOptica) session.getAttribute("principalOptica");
                HistorialClinicoDAO historialDAO = new HistorialClinicoDAO();
                historialDAO.borradoLogico(idHistorial);
                int idCliient = principal.getIdClienteApuntador();
                Vector historiales = historialDAO.seleccionarPorIdCliente(idCliient);
                principal.setHitorialClinico(historiales);
                response.sendRedirect("OpticaJSP/historialClinico.jsp");
            } 
            
            else if(Action.equals("errorlogin")){
                String errorlogin = "DATOS ERRONEOS FAVOR DE VERIFICAR";
                session.setAttribute("errorlogin", errorlogin );
            response.sendRedirect("index.jsp");
            }
            else {
                System.out.println("ERROR EN SERVICIO DEL SERVLET");
            }
        } finally {
            out.close();
        }
    }
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">

    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
